package proto

const WSCmd_Login = "Login"
const WSCmd_JoinRoom = "JoinRoom"
const WSCmd_UserReady = "UserReady"
const WSCmd_GameStart = "GameStart"
const WSCmd_DropChess = "DropChess"
const WSCmd_DropChessSelectKill = "DropChessSelectKill"
const WSCmd_GameResult = "GameResult"
const WSCmd_ErrorMsg = "ErrorMsg"

type ChessPoint struct {
	Row int
	Col int
}

type UserData struct {
	UserId   string
	NickName string
	HeadUrl  string
	Score    int
	SeatId   int
}

type RoomInfo struct {
	RoomId   int
	UserList []UserData
	HeadUrl  string
	Score    int
}

type UserInfo struct {
	RoomId     int
	SeatId     int
	ReadyState int
	LeftTime   int
	PiecesType int
	Data       *UserData
}

// 协议 ----------------------------------------------------------------------------------
// 错误信息
type ErrorMsg struct {
	Msg string
}

type LoginRequest struct {
	/**微信code */
	WXCode string
	/**昵称 */
	NickName string
	/**头像 */
	HeadUrl string
	/**头像 */
	RoomId string
}

/**登录返回 */
type LoginReply struct {
	/**用户token */
	Token string
	/**自己数据 */
	User UserData
	/**房间列表 */
	RoomList []RoomInfo
	/**房间号 重连时，在房间中时用到*/
	RoomId int
	/**棋盘大小*/
	GridSize int
}

/**进入/创建 房间*/
type JoinRoomRequest struct {
	/**传0为快速创建，不为0则是加入 */
	RoomId int
}

/**进入/创建 房间 返回*/
type JoinRoomReply struct {
	/**用户数据 */
	UserList []UserInfo
}

/**用户准备 */
type UserReadyRequest struct {
	/**0取消 1准备 */
	State int
}

/**用户准备返回 */
type UserReadyReply struct {
	/**0取消 1准备 */
	State int
	/**坐位ID */
	SeatId int
}

/**游戏开始 重连时直接推这个*/
type GameStartReply struct {
	/**棋盘数据 二维数组，正常开始可为空，重连回来需要 */
	ChessData [][]int
	/**游戏状态 */
	State int
	/**当前出手用户 */
	CurOptUser int
	/**用户数据 */
	Users []UserInfo
}

/**落子请求 */
type DropChessRequest struct {
	/**落子坐标 可连跳，所以为数组*/
	Point []ChessPoint
}

/**特殊阵型吃子请求 */
type KillRequest struct {
	/**落子坐标 可连跳，所以为数组*/
	Point []ChessPoint
	/**吃子列表 */
	KillPoint []ChessPoint
}

/**落子结果 */
type DropChessReply struct {
	/**落子坐标 可连跳，所以为数组*/
	Point []ChessPoint
	/**吃子列表 */
	KillPoint []ChessPoint
	/**游戏状态 */
	State int
	/**棋盘数据 二维数组*/
	ChessData [][]int
	/**当前操作用户 */
	CurOptUser int
	/**下一个出手用户 */
	NextOptUser int
	/**出手剩余时间 */
	Timestamp int
	/**可吃子 */
	CanKillCount int
}

/**游戏结束接口 */
type GameResultReply struct {
	/**赢家棋色 */
	WinPiecesType int
	/**赢的一方赢多少 */
	WinScore int
	/**输的一方输多少*/
	LoseScore int
}
